package com.itwill.ecom.admin;

/**
 * 
 * 한페이지에 보여질 행과 페이지 수, 선택받은 페이지 번호를 통해
 * 연산을 하여 여러가지 값을 뽑아내기 위한 클래스이다.
 * 이 클래스에서 결과값을 저장하는 AdminListBeans 로 반환한다.
 * AdminListBeans 에서 리스트변수는 아직 비어져 있는 상태
 *
 */

/** 않쓰이는 속성, 메서드들 있어도 나중에 쓸지 몰라서 둠 **/

public class AdminPageCounter {
	
	public AdminPageCounter() {
		// TODO Auto-generated constructor stub
		System.out.println("AdminPageCounter생성자");
	}
	
	public static AdminPageCounter instance(){
		return new AdminPageCounter();
	}
	
	//페이지설정인자와 DB에서가져온리스트의총개수인자
	public AdminListBeans findList(AdminPageConfigBeans adminPageConfigBeans, int listCount){
		
		int rowCount = adminPageConfigBeans.getRowCount(); //한페이지에 보여질 총 행수
		int pageCount = adminPageConfigBeans.getPagingCount(); //한페이지에 보여질 페이지 번호 개수 
		int selectPageNo = adminPageConfigBeans.getselectPageNo();
		
		
		int totalPageCount = 0; //전체페이지수를 담을 변수
		
		//전체페이지수연산
		if(listCount>1){ //1개이상의 불러온 리스트가 존재할때
			if(listCount%rowCount != 0){ //나머지가있으면 페이지 1개 더 필요
				totalPageCount = listCount/rowCount + 1;
			}
			else{ //나머지가없으면 페이지 딱 거기까지
				totalPageCount = listCount/rowCount;
			}
		}
		else{ //불러온 리스트가 없을때
			totalPageCount = 1;
		}
		
		
		int groupNo = (selectPageNo-1)/pageCount;//해당선택페이지가 포함된 그룹저장변수
		/*  1~10 : 0그룹
		 * 11~20 : 1그룹
		 * 21~30 : 2그룹...
		 */
		
		
		int startPageNo = groupNo * pageCount + 1; //0그룹일경우 1번이 시작페이지(1...,11...,21...,...)
	
		
		int endPageNo = groupNo * pageCount + pageCount; //0그룹일경우 설정한 페이지수까지
		if(endPageNo > totalPageCount){ //전체페이지수 넘어가면... 마지막페이지수는 전체페이지수
			endPageNo = totalPageCount;
		}
		
		
		//이전그룹 첫번째 페이지번호 연산(0그룹일경우 이전그룹이 없을 조건필요)
		int preGroupStartPageNo = startPageNo - pageCount;
		if(preGroupStartPageNo < 1){
			preGroupStartPageNo = 1;
		}
		
		
		//이후그룹 첫번째 페이지번호 연산
		int nextGroupStartPageNo = startPageNo + pageCount; //(+1은 startPageNo에 포함되있음)
		if(nextGroupStartPageNo > totalPageCount){ //다음그룹 첫째페이지번호가 전체페이지개수보다 크면
			nextGroupStartPageNo = startPageNo;
		}
		
		
		/** 행연산 **/
		int startRow = 0;
		int endRow = 0;
		
		//한 페이지만 있는 경우
		if(selectPageNo==1 && selectPageNo==totalPageCount){
			startRow=1;
			endRow=listCount;
		}
		//일반적인 선택페이지 경우
		else if(selectPageNo < totalPageCount){
			startRow = selectPageNo * rowCount - rowCount + 1;
			endRow = selectPageNo * rowCount - rowCount + rowCount; //가독성을 위해 rowCount 유지함
		}
		//마지막페이지에 있는 경우
		else if(selectPageNo == totalPageCount){
			startRow = selectPageNo * rowCount - rowCount + 1;
			endRow = listCount;
		}
		
		
		/** 출력여부 조건주기 **/
		//이전페이지보이기여부(낱개페이지를 의미하는 듯??)
		boolean showPrevious;
		if(selectPageNo > 1){
			showPrevious = true;
		}
		else{
			showPrevious = false;
		}
		
		//다음페이지보이기여부(낱개페이지를 의미하는 듯??)
		boolean showNext;
		if(selectPageNo < totalPageCount){
			showNext = true;
		}
		else{
			showNext = false;
		}
		
		//이전그룹보이기여부
		boolean showPreviousGroup;
		if(preGroupStartPageNo < startPageNo){ //이전그룹의 StartPage번호가 지금 startPage번호보다 작으면
			showPreviousGroup = true;
		}
		else{
			showPreviousGroup = false;
		}
		
		//다음그룹보이기여부
		boolean showNextGroup;
		if(startPageNo < nextGroupStartPageNo){ //다음그룹의 StartPage번호가 지금 startPage번호보다 크면
			showNextGroup = true;
		}
		else{
			showNextGroup = false;
		}
		
		//[처음으로...]보이기여부
		boolean showFirst;
		if(1 < startPageNo){ //선택한 페이지가 한페이지의 페이지수보다 크면(startPageNo은 1..,11..,21..,..)
			showFirst = true;
		}
		else{
			showFirst = false;
		}
		
		//[마지막으로...]보이기여부
		boolean showLast;
		if(endPageNo < nextGroupStartPageNo){ //끝페이지번호 뒤에 다음그룹의 start페이지번호가 있으면
			showLast = true;
		}
		else{
			showLast = false;
		}
		
		
		//위에 결과를 AdminListBeans 객체에 넣는다.
		AdminListBeans adminListBeans = new AdminListBeans();
		
		adminListBeans.setRowCount(rowCount);
		adminListBeans.setPageCount(totalPageCount);
		adminListBeans.setSelectPageNo(selectPageNo);
		adminListBeans.setStartPageNo(startPageNo);
		adminListBeans.setEndPageNo(endPageNo);
		adminListBeans.setRowCount(rowCount);
		adminListBeans.setStartRowNum(startRow);
		adminListBeans.setEndRowNum(endRow);
		adminListBeans.setPreGroupStartPageNo(preGroupStartPageNo);
		adminListBeans.setNextGroupStartPageNo(nextGroupStartPageNo);
		adminListBeans.setShowPrevious(showPrevious);
		adminListBeans.setShowNext(showNext);
		adminListBeans.setShowPreviousGroup(showPreviousGroup);
		adminListBeans.setShowNextGroup(showNextGroup);
		adminListBeans.setShowFirst(showFirst);
		adminListBeans.setShowLast(showLast);
	
		return adminListBeans;
	}
}
